package com.wgy.day31字节流.字节输入流;

import java.io.FileInputStream;
import java.io.IOException;

/*
字节输入流一次读取多个字节的方法:
   int read(byte[] b):从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中
                      (每读取一次,指针就向后移动一个数组长度的字节,并将读取到的有效字节存储到数组b中)
明确两件事情:
   1.方法的参数byte[]的作用
       起到缓冲作用,存储每次读取的每个字节
       数组的长度一般定义为1024(1kb)或者1024的倍数
   2.方法的返回值int是什么?
       每次读取的有效字节个数

String类的构造方法:
       String(byte[] bytes): 把字节数组转换为字符串
       String(byte[] bytes,int offset,int length): 把字节数组的一部分转换为字符串
                                   参数:int offset:数组的开始索引
                                       int length:转换的字节个数
*/
public class Demo02InputStream {
    public static void main(String[] args) throws IOException {
        //1.创建一个FileInputStream对象,构造方法中绑定要读取的数据源
        FileInputStream fis = new FileInputStream("D:\\小云\\abc\\b\\b.txt");//源文件:abcde
        //2.调用FileInputStream对象中的方法read(byte[] b),读取文件
/*        byte[] bytes = new byte[2];
        int len = fis.read(bytes);//数组长度为2,只能存储2个字节到数组中,所以每次可读取2个字节
        System.out.println(len);//2:每次读取的有效字节个数  读取到了ab
        System.out.println(new String(bytes));//ab

        len = fis.read(bytes);
        System.out.println(len);//2:每次读取的有效字节个数  读取到了cd
        System.out.println(new String(bytes));//cd

        len = fis.read(bytes);
        System.out.println(len);//1:每次读取的有效字节个数  读取到了e结束了,只读取了一个有效字节数e
        System.out.println(new String(bytes));//ed

        len = fis.read(bytes);
        System.out.println(len);//-1:读取到了结束标记,没有读取到有效字节数,返回-1
        System.out.println(new String(bytes));//ed
*/

/*    发现以上的读取文件是一个重复的过程,可以使用循环优化,
     不知道文件中有多少个字节,使用while循环
     while 循环结束条件,读取到-1的时候结束
     布尔表达式 (len=fis.read())!= -1
              1.fis.read():读取文件的下一个字节
              2.len=fis.read():将读取到的字节赋值给变量len
              3.(len=fis.read())!= -1:判断变量len是否不等于-1
*/
        byte[] bytes2=new byte[1024];
        int len2 = 0;//记录每次读取的有效字节个数
        while((len2 = fis.read(bytes2))!= -1){
           /* String(byte[] bytes,int offset,int length): 把字节数组的一部分转换为字符串
            参数:int offset:数组的开始索引
            int length:转换的字节个数*/
            System.out.println(new String(bytes2,0,len2));
        }

       //3.释放资源
        fis.close();
    }
}
